package com.jerry.controller;

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.util.WebUtils;

import java.io.*;
import java.util.Properties;

/**
 * Created by Shirly on 2016/8/25.
 */
public class SpringController {
    public static void main(String[] args) {
        try {
            String filePath =
                    "G:/下载文件/untitled2/src/main/webapp/WEB-INF/conf/file1.txt";
            // ① 使用系统文件路径方式加载文件
            Resource res1 = new FileSystemResource(filePath);
            // ② 使用类路径方式加载文件
            Resource res2 = new ClassPathResource("conf/file1.txt");
            InputStream ins1 = res1.getInputStream();
            InputStream ins2 = res2.getInputStream();
            System.out.println("res1:"+res1.getFilename());
           System.out.println("res2:"+res2.getFilename());


            File clsFile = ResourceUtils.getFile("classpath:conf/file1.txt");
            System.out.println(clsFile.isFile());

            String httpFilePath = "G:/下载文件/untitled2/src/main/webapp/WEB-INF/conf/file1.txt";
            File httpFile = ResourceUtils.getFile(httpFilePath);
            System.out.println(httpFile.isFile());


            Resource res = new ClassPathResource("conf/file1.txt");
            //  将文件内容拷贝到一个 byte[] 中
            byte[] fileData = FileCopyUtils.copyToByteArray(res.getFile());
            // 将文件内容拷贝到一个 String 中
            String fileStr = FileCopyUtils.copyToString(new FileReader(res.getFile()));
            //  将文件内容拷贝到另一个目标文件
            System.out.println(res.getFile().getParent());
            FileCopyUtils.copy(res.getFile(),
                    new File(res.getFile().getParent()+ "/file3.txt"));
            // 将文件内容拷贝到一个输出流中
            OutputStream os = new ByteArrayOutputStream();
            FileCopyUtils.copy(res.getInputStream(), os);


            // ① jdbc.properties 是位于类路径下的文件
            Properties props = PropertiesLoaderUtils.loadAllProperties("log4j.properties");
            System.out.println(props.getProperty("log4j.rootLogger"));
            //loadProperties 参数为Resource
            Resource testResource = new ClassPathResource("log4j.properties");
            Properties testprops = PropertiesLoaderUtils.loadProperties(testResource);
            System.out.println(testprops.getProperty("log4j.appender.stdout.layout"));

            // fillProperties  将 Resource 中的属性数据添加到一个已经存在的 Properties 对象中
            Resource newResource = new ClassPathResource("new.properties");
            PropertiesLoaderUtils.fillProperties(props,newResource);
            System.out.println(props.getProperty("new"));


            //spring工具类处理特殊编码的资源
            Resource res3 = new ClassPathResource("conf/file1.txt");
            // ① 指定文件资源对应的编码格式（UTF-8）
            EncodedResource encRes = new EncodedResource(res3,"UTF-8");
            // ② 这样才能正确读取文件的内容，而不会出现乱码
            String content  = FileCopyUtils.copyToString(encRes.getReader());
            System.out.println(content);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
